"""11.3 用户登录后台业务实现（存储、查询、初始化）"""
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
from score_widow import ScoreWindow
'''
   ====信息信息类 UserInfo ===
'''
class UserInfo:
    # 用户编号 id_no,姓名 name,登录名 login_name,登录密码 pwd,性别 sex,年龄 age,状态status,备注 remark
    def __init__(self,**kwargs):
        print("------------------初始化 UserInfo-----------")
        self.id_no = kwargs.get("id_no")
        self.name = kwargs.get("name")
        self.login_name = kwargs.get("login_name")
        self.pwd = kwargs.get("pwd")
        self.sex = kwargs.get("sex")
        self.age = kwargs.get("age")
        self.status = kwargs.get("status")
        self.remark = kwargs.get("remark")


    """
    用户登录操作：
    1.获取用户名和密码
    2.验证用户名和密码   
    3.返回登录结果 True-成功：False-失败
    """
    def login(self,login_name,pwd):
        # 登录
        with open("user_list.csv", "r", encoding="utf-8") as f:
            for line in f.readlines():
                user = line.strip().split(",")
                print("打印出用户信息：",user)

                if user[2]==login_name and user[3]==pwd:
                    return True
        return False


'''
   ====菜单类 UserMenu ===
'''
_WINDOW_TYPE_HOME = 0
_WINDOW_TYPE_SCORE = 1
_WINDOW_TYPE_SCORE_QUERY = 11
_WINDOW_TYPE_SCORE_ADD = 12
_WINDOW_TYPE_SCORE_UPDATE = 13
_WINDOW_TYPE_SCORE_DELETE = 14
_WINDOW_TYPE_STUDENT = 2
_WINDOW_TYPE_STUDENT_QUERY = 21
_WINDOW_TYPE_STUDENT_ADD = 22
_WINDOW_TYPE_STUDENT_UPDATE = 23
class MyMenu:


    def __init__(self,root,sub_type,**kwargs):
        self.root = root
        self.sub_type = sub_type

        '''==========初始化菜单============'''
        # 创建菜单栏
        menu_root = tk.Menu(root)
        # 首页菜单
        menu_home = tk.Menu(menu_root, tearoff=0)
        menu_home.add_command(label="首页")
        menu_home.add_separator()
        menu_home.add_command(label="导入")
        menu_home.add_command(label="导出")
        menu_home.add_command(label="退出", command=root.quit)

        # 成绩菜单
        menu_score = tk.Menu(menu_root, tearoff=0)
        menu_score.add_command(label="查询",command=lambda:self.reinit(_WINDOW_TYPE_SCORE_QUERY))
        menu_score.add_separator()
        menu_score.add_command(label="录入")
        menu_score.add_command(label="修改")
        menu_score.add_command(label="删除")

        # 学生信息菜单
        menu_student = tk.Menu(menu_root, tearoff=0)
        menu_student.add_command(label="查询")
        menu_student.add_separator()
        menu_student.add_command(label="录入")
        menu_student.add_command(label="修改")
        menu_student.add_command(label="删除")
        # 加入父级菜单 魔术的方法定义与解决方案
        menu_root.add_cascade(label="首页", menu=menu_home)
        menu_root.add_cascade(label="学生成绩", menu=menu_score)
        menu_root.add_cascade(label="学生信息", menu=menu_student)

        root.config(menu=menu_root)
        # 创建菜单栏
        menu_root = tk.Menu(self.root)

        '''==========初始化子窗口============'''
        if self.sub_type == _WINDOW_TYPE_HOME:
            #初始化首页
            MainWindow(self.root,kwargs.get("name"))
        elif self.sub_type == _WINDOW_TYPE_SCORE_QUERY:
            #初始化成绩管理
            ScoreWindow(self.root)

    """重新初始化菜单及子窗口"""
    def reinit(self,sub_type):
        self.root.destroy()
        MyMenu(tk.Tk(),sub_type)

class LoginWindow:
    def __init__(self, root):
        # 创建登录窗口界面

        root.title("用户登录")
        root.geometry("300x200")
        # 使用Frame容器化管理组件
        iframe = tk.Frame(root, width=300, height=200, relief='ridge')
        iframe.grid(padx=20, pady=30)
        # 系统标题
        sys_label = tk.Label(iframe, text="学生成绩管理系统",fg="green",font=("华文行楷",20))
        sys_label.grid(row=0, column=0, columnspan=2,pady=10)
        # 用户名输入
        name_label = tk.Label(iframe, text="用户名：")
        self.name_entry = tk.Entry(iframe)
        name_label.grid(row=1, column=0, sticky="e")
        self.name_entry.grid(row=1, column=1, sticky="w")
        # 密码的输入
        pwd_label = tk.Label(iframe, text="密码：", padx=10)
        self.pwd_entry = tk.Entry(iframe, show="*")
        self.pwd_entry.bind("<Return>", lambda event: self.login())
        pwd_label.grid(row=2, column=0, sticky="e")
        self.pwd_entry.grid(row=2, column=1, sticky="w")
        # 登录按钮
        login_button = tk.Button(iframe, text="登录", width=10, command=self.login)
        login_button.grid(row=3, column=0, columnspan=2)
        root.mainloop()

    def login(self):
        print("--------------")
        # 获取用户名和密码
        username = self.name_entry.get()
        password = self.pwd_entry.get()
        # 验证用户名和密码
        if self.validate_login(username,password):
            # 登录成功，弹出提示框
            tk.messagebox.showinfo("登录成功", "欢迎登录")
            # 销毁当前窗口，打开主界面
            root.destroy()
            # 加载菜单及子窗口
            MyMenu(tk.Tk(),_WINDOW_TYPE_HOME,name=username)


        else:
            # 登录失败，弹出提示框
            tk.messagebox.showerror("登录失败", "用户名或密码错误")
    def validate_login(self,username,pwd):
        #登录操作
        return UserInfo().login(username,pwd)



class MainWindow:
    def __init__(self, main,name):
        # 创建主窗口界面
        main.title("学生成绩管理系统")
        main.geometry("400x300")
        label = tk.Label(main, text=f"{name},您好！欢迎使用<学生成绩管理系统>", font=("华文行楷", 15), fg="green")
        label.grid(pady=20)
        frame = tk.Frame(main)
        frame.grid(padx=20, pady=20)
        # 学生信息管理
        label2 = tk.Label(frame, text="--学生信息管理--", font=("华文行楷", 15), fg="orange")
        label2.grid(row=0, column=0, columnspan=2, pady=10)

        """主页显示用户信息：@todo 补充当前登录的用户信息--"""
        # 第一行
        label3 = tk.Label(frame, text="编号：", font=("华文隶书", 15))
        label3.grid(row=1, column=0, sticky="e")
        label4 = tk.Label(frame, text="--", font=("华文隶书", 15))
        label4.grid(row=1, column=1, sticky="w")
        label5 = tk.Label(frame, text="姓名：", font=("华文隶书", 15))
        label5.grid(row=1, column=2, sticky="e")
        label6 = tk.Label(frame, text="--", font=("华文隶书", 15))
        label6.grid(row=1, column=3, sticky="w")
        # 第一行
        label7 = tk.Label(frame, text="年龄：", font=("华文隶书", 15))
        label7.grid(row=2, column=0, sticky="e")
        label7 = tk.Label(frame, text="--", font=("华文隶书", 15))
        label7.grid(row=2, column=1, sticky="w")
        label8 = tk.Label(frame, text="性别：", font=("华文隶书", 15))
        label8.grid(row=2, column=2, sticky="e")
        label8 = tk.Label(frame, text="--", font=("华文隶书", 15))
        label8.grid(row=2, column=3, sticky="w")


# __main__
# __main__
if __name__ == "__main__":
    root = tk.Tk()
    login_window = LoginWindow(root)




